package cn.iocoder.yudao.module.diy.dal.mysql.diy;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.diy.controller.admin.diy.vo.page.DiyPagePageReqVO;
import cn.iocoder.yudao.module.diy.dal.diy.NDiyPageDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 装修页面 Mapper
 *
 * @author owen
 */
@Mapper
public interface NDiyPageMapper extends BaseMapperX<NDiyPageDO> {

    default PageResult<NDiyPageDO> selectPage(DiyPagePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<NDiyPageDO>()
                .likeIfPresent(NDiyPageDO::getName, reqVO.getName())
                .eqIfPresent(NDiyPageDO::getType, reqVO.getType())
                .eqIfPresent(NDiyPageDO::getMode, reqVO.getMode())
                .betweenIfPresent(NDiyPageDO::getCreateTime, reqVO.getCreateTime())
                // 模板下面的页面，在模板中管理
                .isNull(NDiyPageDO::getTemplateId)
                .orderByDesc(NDiyPageDO::getId));
    }

    default PageResult<NDiyPageDO> selectPage2(DiyPagePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<NDiyPageDO>()
                .likeIfPresent(NDiyPageDO::getName, reqVO.getName())
                .eqIfPresent(NDiyPageDO::getType, reqVO.getType())
                .eqIfPresent(NDiyPageDO::getMode, reqVO.getMode())
                .betweenIfPresent(NDiyPageDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(NDiyPageDO::getId));
    }
    default List<NDiyPageDO> selectList(DiyPagePageReqVO reqVO) {
        return selectList();
    }

    default List<NDiyPageDO> selectListByTemplateId(Long templateId) {
        return selectList(NDiyPageDO::getTemplateId, templateId);
    }

    default NDiyPageDO selectByNameAndTemplateIdIsNull(String name) {
        return selectOne(new LambdaQueryWrapperX<NDiyPageDO>()
                .eq(NDiyPageDO::getName, name)
                .isNull(NDiyPageDO::getTemplateId));
    }

}
